popover: Add ::closed signal
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 6 Feb 2014 14:30:55 +0000 (15:30 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 6 Feb 2014 14:32:48 +0000 (15:32 +0100)
This signal is emitted when the popover is dismissed either through
API or user interaction, somewhat more friendly than connecting to
::unmap.

gtk/gtkpopover.c
gtk/gtkpopover.h

index ac5170f5612c58eadcdba364a5207a51505b22e2..76b31d16cd2cf261256b525f65573e5f287adcd4 100644 (file)
@@ -66,6 +66,11 @@ enum {
   PROP_MODAL
 };
 
+enum {
+  CLOSED,
+  N_SIGNALS
+};
+
 struct _GtkPopoverPrivate
 {
   GtkWidget *widget;
@@ -89,6 +94,7 @@ struct _GtkPopoverPrivate
 };
 
 static GQuark quark_widget_popovers = 0;
+static guint signals[N_SIGNALS] = { 0 };
 
 static void gtk_popover_update_position    (GtkPopover *popover);
 static void gtk_popover_update_relative_to (GtkPopover *popover,
@@ -289,6 +295,8 @@ gtk_popover_unmap (GtkWidget *widget)
   priv = GTK_POPOVER (widget)->priv;
   priv->button_pressed = FALSE;
 
+  g_signal_emit (widget, signals[CLOSED], 0);
+
   if (priv->modal)
     gtk_popover_apply_modality (GTK_POPOVER (widget), FALSE);
 
@@ -1226,6 +1234,14 @@ gtk_popover_class_init (GtkPopoverClass *klass)
                                                          TRUE,
                                                          GTK_PARAM_READWRITE));
 
+  signals[CLOSED] =
+    g_signal_new (I_("closed"),
+                  G_TYPE_FROM_CLASS (object_class),
+                  G_SIGNAL_RUN_LAST,
+                  G_STRUCT_OFFSET (GtkPopoverClass, closed),
+                  NULL, NULL, NULL,
+                  G_TYPE_NONE, 0);
+
   quark_widget_popovers = g_quark_from_static_string ("gtk-quark-widget-popovers");
 }
 
index 2d2e6303d98926e2c070374041fcaeaa6701b486..b3b5a05cb9e2986cd0aaaa12ee8f7499cdc8bf78 100644 (file)
@@ -48,6 +48,8 @@ struct _GtkPopoverClass
 {
   GtkBinClass parent_class;
 
+  void (* closed) (GtkPopover *popover);
+
   /* Padding for future expansion */
   gpointer reserved[10];
 };